﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using ServicioComunitario2.Logica.Clases;
using ServicioComunitario2.Logica.Excepciones;
using ServicioComunitario2.EnlaceDatos;


namespace ServicioComunitario2.EnlaceDatos.SqlServer
{
    public class SqlInformacion
    {
        #region Insertar Informacion


        public bool InsertarInformacion(Informacion _miInformacion)
        {

            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();


            try
            {
                //Se abre la conexion a la base de datos
                miConexion.AbrirConexionBd();
                //se introducen los datos de la conexion y el nombre del stored procedure a utilizar
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[AgregarHistoria]";
                command.CommandTimeout = 10;

                //Se introducen los parametros del stored procedure
                command.Parameters.AddWithValue("@fechaIni", _miInformacion.FechaInicio);
                command.Parameters.AddWithValue("@fechaFin", _miInformacion.FechaFin);
                command.Parameters.AddWithValue("@cuerpoHis", _miInformacion.CuerpoHistoria);
                command.Parameters.AddWithValue("@personaHis", _miInformacion.IdAutor);

                command.Parameters["@fechaIni"].Direction = ParameterDirection.Input;
                command.Parameters["@fechaFin"].Direction = ParameterDirection.Input;
                command.Parameters["@cuerpoHis"].Direction = ParameterDirection.Input;
                command.Parameters["@personaHis"].Direction = ParameterDirection.Input;

                // se ejecuta el comando, se ejecuta el stored procedure InsertarEscuela
                command.ExecuteReader();

                return true;
            }
            catch (SqlException)
            {
                return false;
            }
            catch (Exception e)
            {
                return false;
            }

             //se cierra la conexion una vez ejecutado el comando.
            finally
            {
                miConexion.CerrarConexionBd();
            }
        }

        public Informacion ConsultarInformacion(int idHistoria)
        {

            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;

            try
            {
                //Se abre la conexion a la base de datos
                miConexion.AbrirConexionBd();
                //se introducen los datos de la conexion y el nombre del stored procedure a utilizar
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[DetallesHistoria]";
                command.CommandTimeout = 10;

                //Se introducen los parametros del stored procedure
                command.Parameters.AddWithValue("@idHis", idHistoria);

                command.Parameters["@idHis"].Direction = ParameterDirection.Input;

                // se ejecuta el comando, se ejecuta el stored procedure InsertarEscuela
                Informacion historia = new Informacion();
                reader = command.ExecuteReader();

                if (reader.Read())
                {
                    historia.FechaInicio = reader.GetDateTime(0);
                    historia.FechaFin = reader.GetDateTime(1);
                    historia.CuerpoHistoria = reader.GetString(2);
                    
                }
                return historia;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                return null;
            }

             //se cierra la conexion una vez ejecutado el comando.
            finally
            {
                miConexion.CerrarConexionBd();
            }
        }

        public List<Informacion> ListarTodasInformaciones()
        {
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            List<Informacion> miListaNoticia = new List<Informacion>();

            try
            {
                miConexion.AbrirConexionBd();
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ListarInformacion]";
                command.CommandTimeout = 10;
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Informacion miInformacion = new Informacion();
                    
                    miInformacion.IdHistoria = reader.GetInt32(0);
                    miInformacion.FechaInicio = reader.GetDateTime(1);
                    miInformacion.NombreAutor = reader.GetString(2);
                    miInformacion.CuerpoHistoria = reader.GetString(3).Substring(0,7);
                  

                    miListaNoticia.Add(miInformacion);
                }

                return miListaNoticia;

            }
            catch (SqlException)
            {
                return miListaNoticia;//cambiar luego es una prueba
            }
            finally
            {
                miConexion.CerrarConexionBd();
            }


        }

        #endregion Final de la funcion InsertarInformacion
    }
}